package poker;
import java.util.Scanner;

public class Human extends Player{

  private String playerName;

  /** KONSTRUKTOR. */
  Human(String name){
    playerName=name;
  }

  /** ZWRACANIE NAZWY GRACZA. */
  String getName(){
    return("[" + playerName + "]");
  }
  
  /** ZWRACANIE WARTOSCI Z PRZEDZIALU [a,b] (WYBRANEJ PRZEZ GRACZA). */
  int getValue(int a, int b){
    int input=(-1);
    Scanner keyboard=new Scanner(System.in);
    try{
	  do{ /** WCZYTUJEMY WARTOSC Z PRZEDZIALU [a,b]. */
	    System.out.print("[" + playerName + "]" + " Choose value (" + a + "-" + b + "): ");
	    input=keyboard.nextInt();
	  } while((input<a)||(input>b));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
    return(input);
  }

  /** ZWRACANIE TABLICY KART DO WYMIANY (WYBRANYCH PRZEZ GRACZA). */
  int[] exchangeCards(){
    int[] toExchange;
    int input=(-1),alreadyUsed;
    Scanner keyboard=new Scanner(System.in);
	try{
	  do{ /** WCZYTUJEMY ILOSC KART DO WYMIANY. */
	    System.out.print("[" + playerName + "]" + " Number of cards to exchange: ");
	    input=keyboard.nextInt();
	  } while((input<0)||(input>4));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	System.out.println();
	if(input==0){toExchange=new int[] {0};}
	else{ /** JESLI WYMIENIAMY JAKIES KARTY. */
	  toExchange=new int[input];
	  for(int i=0;i<(toExchange.length);i++){
	    try{
	      do{
		    System.out.print("[" + playerName + "]" + " Choose card: ");
		    input=keyboard.nextInt();
			alreadyUsed=0;
			for(int j=0;j<i;j++){if(toExchange[j]==input) alreadyUsed=1;} /** POWTARZAMY WYBOR KARTY, JESLI WPROWADZONA ZOSTALA JUZ WYBRANA WCZESNIEJ. */
	      } while((input<1)||(input>5)||(alreadyUsed==1));
        } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
		toExchange[i]=input;
        System.out.println();
	  }
	}
	return toExchange;
  }

  /** ZWRACANIE NUMERU AKCJI W RUNDZIE LICYTACJI (WYBRANEJ PRZEZ GRACZA). */
  /** 1-Check, 2-Bet, 3-Raise, 4-Call, 5-Fold, 6-All-In. */
  int betAction(boolean noBet, boolean allIn, boolean canCall, boolean canRaise){
    int input=(-1),action;
    Scanner keyboard=new Scanner(System.in);
	System.out.print("[" + playerName + "]");
    /** MOZNA ZAGRAC: Check, Bet, Fold, All-In. */
	if(noBet){
	System.out.println(" (1) Check  (2) Bet  (3) Fold  (4) All-In ");
	try{
	  do{ /** WCZYTUJEMY NUMER AKCJI. */
	    System.out.print("[" + playerName + "]" + " Number of action: ");
	    input=keyboard.nextInt();
	  } while((input<1)||(input>4));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	if(input==1){return 1;}
	else if(input==2){return 2;}
	else if(input==3){return 5;}
	else if(input==4){return 6;}
	}
	/** MOZNA ZAGRAC: Raise, Call, Fold, All-In. */
	else if((!noBet)&&(!allIn)&&(canCall)&&(canRaise)){
	System.out.println(" (1) Raise  (2) Call  (3) Fold (4) All-In ");
	try{
	  do{ /** WCZYTUJEMY NUMER AKCJI. */
	    System.out.print("[" + playerName + "]" + " Number of action: ");
	    input=keyboard.nextInt();
	  } while((input<1)||(input>4));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	if(input==1){return 3;}
	else if(input==2){return 4;}
	else if(input==3){return 5;}
	else if(input==4){return 6;}
	}
	/** MOZNA ZAGRAC: Call, Fold, All-In. */
	else if((!noBet)&&(!allIn)&&(canCall)&&(!canRaise)){
	System.out.println(" (1) Call  (2) Fold  (3) All-In ");
	try{
	  do{ /** WCZYTUJEMY NUMER AKCJI. */
	    System.out.print("[" + playerName + "]" + " Number of action: ");
	    input=keyboard.nextInt();
	  } while((input<1)||(input>4));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	if(input==1){return 4;}
	else if(input==2){return 5;}
	else if(input==3){return 6;}
	}
	/** MOZNA ZAGRAC: Fold, All-In. */
	else if((!noBet)&&(!allIn)&&(!canCall)){
	System.out.println(" (1) Fold  (2) All-In ");
	try{
	  do{ /** WCZYTUJEMY NUMER AKCJI. */
	    System.out.print("[" + playerName + "]" + " Number of action: ");
	    input=keyboard.nextInt();
	  } while((input<1)||(input>2));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	if(input==1){return 5;}
	else if(input==2){return 6;}
	}
	/** MOZNA ZAGRAC: Fold, All-In. */
	else if(allIn){
	System.out.println(" (1) Fold  (2) All-In ");
	try{
	  do{ /** WCZYTUJEMY NUMER AKCJI. */
	    System.out.print("[" + playerName + "]" + " Number of action: ");
	    input=keyboard.nextInt();
	  } while((input<1)||(input>2));
    } catch (Exception e){System.out.println("[" + playerName + "]" + " INVALID INPUT"); System.exit(0);} /** DLA NIEPOPRAWNEJ WARTOSCI PRZERYWAMY DZIALANIE. */
	if(input==1){return 5;}
	else if(input==2){return 6;}
	}
  return 0;
  }
  
}